// windy数
// 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数
// windy想知道[a,b]范围上总共有多少个windy数
// 测试链接 : https://www.luogu.com.cn/problem/P2657
// 提交以下命名空间中的code，可以直接通过

namespace Code1
{

#include <bits/stdc++.h>

using namespace std;

const int MAXLEN = 11;
int dp[MAXLEN][11][2];

void build(int len)
{
    for(int i = 0; i <= len; ++i)
    {
        for(int j = 0; j <= 10; ++j)
        {
            dp[i][j][0] = -1;
            dp[i][j][1] = -1;
        }
    }
}

// offset完全由len决定，为了方便提取num中某一位数字（上节课内容）
// 从num的高位开始，还剩下len位没有决定
// 前一位的数字是pre，如果pre == 10，表示从来没有选择过数字
// 如果之前的位已经确定比num小，那么free == 1，表示接下的数字可以自由选择
// 如果之前的位和num一样，那么free == 0，表示接下的数字不能大于num当前位的数字
// 返回<=num的windy数有多少个
int f(int num, int offset, int len, int pre, int free)
{
    if(len == 0) return 1;
    if(dp[len][pre][free] != -1) return dp[len][pre][free];

    int cur = (num / offset) % 10;
    int ans = 0;
    if(free == 0)
    {
        if(pre == 10)
        {
            // 之前的位和num一样，此时不能随意选择数字
            // 也从来没有选择过数字
            // 就表示：来到的是num的最高位
            ans += f(num, offset / 10, len - 1, 10, 1); // 一个数字也不要
            for(int i = 1; i < cur; ++i)
            {
                ans += f(num, offset / 10, len - 1, i, 1);
            }
            ans += f(num, offset / 10, len - 1, cur, 0);
        }
        else //pre != 10
        {
            // 之前的位和num一样，此时不能随意选择数字，
            // 之前选择过数字pre
            for(int i = 0; i <= 9; ++i)
            {
                if(i <= pre - 2 || i >= pre + 2)
                {
                    if(i < cur)
                    {
                        ans += f(num, offset / 10, len - 1, i, 1);
                    }
                    else if(i == cur)
                    {
                        ans += f(num, offset / 10, len - 1, i, 0);
                    }
                }
            }
        }
    }
    else // free == 1
    {
        if(pre == 10)
        {
            // free == 1，可以自由选择数字，前面的状况 < num
            // 从来没有选择过数字
            ans += f(num, offset / 10, len - 1, 10, 1); // 还是可以不选择数字
            for(int i = 1; i <= 9; ++i)
            {
                ans += f(num, offset / 10, len - 1, i, 1);
            }
        }
        else // pre != 10
        {
            // free == 1，可以自由选择数字，前面的状况 < num
            // 选择过数字pre
            for(int i = 0; i <= 9; ++i)
            {
                if(i <= pre - 2 || i >= pre + 2)
                {
                    ans += f(num, offset / 10, len - 1, i, 1);
                }
            }
        }
    }

    dp[len][pre][free] = ans;
    return ans;
}

// 求0~num范围上，windy数的个数
int cnt(int num)
{
    if(num == 0) return 1;
    
    int len = 1;
    int tmp = num / 10;
    int offset = 1;
    while(tmp > 0)
    {
        ++len;
        tmp /= 10;
        offset *= 10;
    }
    build(len);
    return f(num, offset, len, 10, 0);
}

int compute(int a, int b)
{
    return cnt(b) - cnt(a - 1);
}

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", compute(a, b));

    return 0;
}

}


namespace Code2
{

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 10;
int dp[MAXN][MAXN];
int a, b;

int cnt(int n)
{
    auto s = to_string(n);
    int m = s.size();
    memset(dp, -1, sizeof dp);
    /*
    prev 表示前一位所填的数字，因为要保证相邻两个数字之差至少为 2 
    
    is_limit 表示当前是否受到了 n 的约束。若为真，则第 i 为填入的
    数字至多为 s[i]，否则可以是 9，如果在受到约束的情况下填了 s[i]，
    那么后续填入的数字仍会受到 n 的约束。

    is_num 表示 i 前面的数位是否填了数字。若为假，则当前位可以跳过
    （不填数字），或者要填入的数字至少为 1；若为真，则要填入的数字
    可以从 0 开始。

    在本题中，因为不能有前导零，因此需要 is_num 这个参数
    */
    function<int(int, int, bool, bool)> f = [&](int i, int prev, bool is_limit, bool is_num) -> int
    {
        if(i == m) return is_num;
        if(!is_limit && is_num && dp[i][prev] != -1) return dp[i][prev];

        int ans = 0;
        // 之前的位没有填写数字，这个位也可以不填写数字
        if(!is_num) ans = f(i + 1, prev, false, false);
        int up = is_limit ? s[i] - '0' : 9;
        for(int d = 1 - is_num; d <= up; ++d)
        {
            // 相邻两个数字之差小于 2，直接 continue
            if(abs(d - prev) < 2) continue;
            ans += f(i + 1, d, is_limit && d == up, true);
        }
        if(!is_limit && is_num) dp[i][prev] = ans;
        return ans;
    };
    // 给 prev 参数传 11 的原因是，11 和 0 到 9 任意一个数字的差值都大于 2
    // 不会影响最高位数字的填写，同样也可以传 -2 给 prev 参数
    return f(0, 11, true, false);
}

int compute(int low, int high)
{
    return cnt(high) - cnt(low - 1);
}

int main()
{
    scanf("%d%d", &a, &b);
    printf("%d\n", compute(a, b));

    return 0;
}

}